import axios from 'axios';
import VueAxios from 'vue-axios';
import { useStore } from '@/store'

//弹框标记
let msgFlag = false;

//--------------------------------Axios配置拦截----------------------------------------

axios.interceptors.request.use(
    (config) => {
        let store = useStore()
        console.log('Token', store.token)
        //请求拦截处理
        let token = store.token;
        if (token) {
            console.log(config.headers)
            // config.headers.common['Authorization'] = token; //axios低版本时使用的
            config.headers.set('Authorization', `${token}`)
        }
        return config;
    },
    (error) => {
        // ElMessage.error("request：" + error)
        return Promise.resolve(error);
        // return Promise.reject(error);
    }
);

axios.interceptors.response.use(
    async (response) => {
        //动态导入router
        const dynamicRouter = await import('./router')
        const router = dynamicRouter.default
        // console.log('请求成功了', response.data)
        if (response.data || response.data.code === 0) {
            //请求响应处理
            return response;
        } else {
            // ElMessage.error(response.data.message)
            return Promise.reject(response.data); //返回一个被拒绝的对象
        }
    },
    async (error) => {
        //解决Token失效多次弹框问题
        if (!msgFlag) {
            //动态导入router
            const dynamicRouter = await import('./router')
            const router = dynamicRouter.default
            if (error.response) {
                error.message = error.response.data.message
            }
            // ElMessage.error('请求失败：' + error.message)
            if (error.response.data.code === 1001) {
                router.replace("/login")
            }
            msgFlag = true;
            setTimeout(() => {
                msgFlag = false;
            }, 3000);
        }
        return Promise.reject(error); //返回一个被拒绝的对象
        // return Promise.resolve(error); //返回一个被解决的对象
    }
);

//导出多个（属性/方法）
export { axios, VueAxios };
